/**
 * @param {number[][]} matrix
 */
var NumMatrix = function(matrix) {
    var h=matrix.length;
    if(h==0){
        return ;
    }
    var w=matrix[0].length;
    for(let i=0;i<h;i++){
        for(let j=0;j<w;j++){
            if(j>0){
                matrix[i][j]+=matrix[i][j-1];
            }
            if(i>0){
                matrix[i][j]+=matrix[i-1][j];
            }
            if(i>0&&j>0){
                matrix[i][j]-=matrix[i-1][j-1]
            }
        }
    }
    this.matrix=matrix;
};

/** 
 * @param {number} row1 
 * @param {number} col1 
 * @param {number} row2 
 * @param {number} col2
 * @return {number}
 */
NumMatrix.prototype.sumRegion = function(row1, col1, row2, col2) {
    if(row1==0&&col1==0){
        return this.matrix[row2][col2];
    }
    else if(row1==0){
        return this.matrix[row2][col2]-this.matrix[row2][col1-1];
    }
    else if(col1==0){
        return this.matrix[row2][col2]-this.matrix[row1-1][col2];
    }
    else{
        return this.matrix[row2][col2]-this.matrix[row2][col1-1]-this.matrix[row1-1][col2]+this.matrix[row1-1][col1-1];
    }
};

/**
 * Your NumMatrix object will be instantiated and called as such:
 * var obj = new NumMatrix(matrix)
 * var param_1 = obj.sumRegion(row1,col1,row2,col2)
 */


// 执行用时：
// 108 ms
// , 在所有 JavaScript 提交中击败了
// 87.21%
// 的用户
// 内存消耗：
// 43.5 MB
// , 在所有 JavaScript 提交中击败了
// 15.12%
// 的用户
 